1. Field of the Invention
The present invention relates to the systems and methods for multiplexing packet streams on a shared transport channel, and, more particularly, to a method for ensuring unique identification of packets associated with one or more program streams to be multiplexed on an single transport channel.
2. Discussion of the Prior Art
The MPEG-2 Generic Coding of Moving Pictures and Associated Audio: Systems Recommendation H.222.0 ISO/IEC 13818-1 defines the mechanisms for combining, or multiplexing, several types of multimedia information into one program stream. This standard uses a known method of multiplexing, called packet multiplexing. With packet multiplexing, elementary streams comprising data, video, audio, etc. are interleaved one after the other into a single MPEG-2 stream.
Transport Streams (TSs) are defined for transmission networks that may suffer from occasional transmission errors. The Packetized Elementary Streams (PESs) are further packetized into shorter TS packets of fixed length, e.g., 188 bytes. A major distinction between TS and PES is that the TS can carry several programs. Each TS packet consists of a TS Header, followed optionally by ancillary data called Adaption Field, followed typically by some or all the data from one PES packet. The TS Header consists of a sync byte (0xc3x9747), flags, indicators, Packet Identifier (PID), and other information for error detection, timing, etc. According to the MPEG-2 standard, the semantics for the TS include the following:
Sync_byte: (8-bits) a fixed value 0xc3x9747;
Transport_error_indicator: (1-bit) for indicating that an uncorrectable bit error exists in the current TS packet;
Payload_unit_start_indicator: (1-bit) for indicating the presence of a new PES packet or a new TS-PSI (program specific information) Section;
Transport_priority: (1-bit) for indicating a higher priority than other packets;
PID: 13-bit packets Ids including values 0 and 1 which are pre-assigned, while values 2 to 15 are reserved. Values 0xc3x970010 to 0xc3x971FFE, may be assigned by the Program Specific Information (PSI) and value 0xc3x971FFF is used to identify MPEG-2 Null packets;
Transport_scrambling_control: (2-bits) for indicating the scrambling mode of the packet payload;
Adaptation_field_control: (2-bits) for indicating the presence of an optional adaptation field prior to the payload;
Continuity_counter: which is a counter provided per PID (e.g., 4-bits) that increments with each non-repeated TS packet having the corresponding PID.
Each MPEG-2 program stream may be characterized as a data stream (which can contain data originated from a multitude of data sources) encapsulated using MPEG-2 TS packets, with each packet containing a header field with a Packet Identifier (PID). The PID field is used by the transport demultiplexer to xe2x80x9ctunexe2x80x9d to a particular set of PID""s that correspond to a given program stream. Each program stream must have a set of distinct PID""s (except for PID=0xc3x971FFF for the MPEG-2 Null packet).
As an example:
Program Stream 1: less than video PID=0xc3x97101, audio PID=0xc3x97102, secondary audio PID=0xc3x97107, 0xc3x971FFF greater than valid
Program Stream 2: less than video PID=0xc3x97101, audio PID=0xc3x97200, private data PID=0xc3x97107, 0xc3x971FFF greater than valid
Program Stream 3: less than video PID=0xc3x97102, audio PID=0xc3x97102, 0xc3x97109 greater than invalid (audio and video programs are sharing same PID=0xc3x97102).
As an MPEG-2 transport stream multiplexes several program streams into one single transport, in order to avoid ambiguity at the receiver, it is required that all the PID""s belonging to the transport stream be distinct. Thus, given a set of program streams that need to be multiplexed into a single transport stream, all the PID""s must be distinct (except for the Null packet which can be present in any program stream). In the above example, the PID=0xc3x97101 is used for (video programs 1 and 2) is not allowed since it will lead to a conflict error. Therefore, in the example, one of the programs has to re-assign a new PID value to all packets containing PID=0xc3x97101 in order to remove the conflict. It is necessary to provide, in a multiplexing technique, a mechanism for eliminating the PID conflict.
One way to solve this problem is a static technique implemented at program stream creation time, which requires the encoder to ensure distinction for all the PID""s for all the program to be multiplexed into a single transport stream. This requires the content provider to encode all material (e.g., movies, documentaries, sports events, news, etc.) with full knowledge of the playing sequence, to avoid PID conflict among the sources which is very restricting. Typically, this playing sequence is not known at encoding time making the static re-mapping scheme virtually infeasible.
Another possibility for eliminating the PID conflict is to search all the PID""s for all the program streams that are being multiplexed. If a PID value appears in more than one program stream, then a new value is chosen that is not being used by any of the program streams. However, this process is time consuming and non-efficient because for each PID it is necessary to check all others to see if it is used by another program, the process has to be repeated for all the PID""s for all the programs.
It would be highly desirable to provide a very efficient PID re-mapping mechanism for eliminating the PID conflict in the multiplexed transport stream, and moreover, one that is implementable in hardware so the PID re-mapping can be done in real-time.
It is an object of the present invention to provide a dynamic technique for distinctly assigning numbers to packets belonging to a plurality of program streams to be multiplexed on a transport channel, while avoiding searching of all the PID""s for all the program streams.
It is another object of the invention to provide a real-time processing mechanism for dynamically re-mapping PIDs to eliminate the PID conflict in the multiplexed transport stream imposing no limitation on the PID assignment at the encoding time.
According to the invention there is provided a method for re-mapping packet identifier (PID) values provided in transport packets associated with different program streams to be multiplexed onto a single shared transport channel, each program stream having an associated identifier value, the method including: utilizing original PID value associated with packet to index a first table for generating an offset value; addressing a region of a second table using the offset value, the second table providing a plurality of new PID values capable of re-mapping the original PID value; utilizing the identifier value associated with the transport stream to provide an index into said region for outputting the new PID value. The new PID value is then exchanged with the original PID in the transport packet header. The PID re-mapping scheme of the invention is very efficient and straight forward to implement, using a look-up table (SRAM) and limited hardware assist (for real-time support). The PID re-mapping scheme additionally implements a mechanism for dynamically increasing or decreasing the size of a given PID re-mapping region. Furthermore, besides performing a transport stream PID re-mapping capability, the apparatus and method is also capable of modifying the MPEG-2 TS continuity_counter fieldxe2x80x94which capability is important for: 1) applications that switch between different program streams while maintaining the continuity of the continuity_count; and, 2) other content alteration schemes that require prevention of continuity content xe2x80x9cjumpsxe2x80x9d.